/**
 * 代码库学习脚本
 * 用于扫描 OHCode 目录并学习所有 OpenHarmony 工程
 */

import * as path from 'path';
import * as fs from 'fs';

// 设置 OHCode 目录路径（请根据实际情况修改）
const OH_CODE_PATH = process.env.OHCODE_PATH || 'C:/OHCode';

async function main() {
    console.log('🎓 OpenHarmony 代码库学习系统');
    console.log('================================\n');
    
    // 检查 OHCode 目录是否存在
    if (!fs.existsSync(OH_CODE_PATH)) {
        console.error(`❌ 错误：OHCode 目录不存在: ${OH_CODE_PATH}`);
        console.error(`\n💡 请设置环境变量 OHCODE_PATH 或修改脚本中的路径`);
        console.error(`   例如: set OHCODE_PATH=D:\\OHCode`);
        process.exit(1);
    }
    
    console.log(`📂 OHCode 目录: ${OH_CODE_PATH}`);
    
    // 统计工程数量
    const projectCount = countProjects(OH_CODE_PATH);
    console.log(`📊 发现 ${projectCount} 个 OpenHarmony 工程\n`);
    
    if (projectCount === 0) {
        console.warn('⚠️  未发现任何 OH 工程（包含 bundle.json 的目录）');
        process.exit(1);
    }
    
    // 动态导入 CodebaseIndexer
    const { CodebaseIndexer } = await import('../core/knowledge/CodebaseIndexer');
    
    console.log('🚀 开始学习代码库...\n');
    console.log('预计时间：');
    console.log(`  - ${projectCount} 个工程约需 ${Math.ceil(projectCount * 0.5)} 分钟`);
    console.log(`  - 请耐心等待...\n`);
    
    const startTime = Date.now();
    
    try {
        const indexer = new CodebaseIndexer(OH_CODE_PATH);
        await indexer.learnCodebase();
        
        const duration = Math.round((Date.now() - startTime) / 1000);
        console.log(`\n✅ 学习完成！总耗时: ${duration} 秒`);
        console.log(`\n💾 知识库已保存到: core/knowledge/codebase-knowledge.json`);
        console.log(`\n🎯 现在可以使用插件生成高质量的测试代码了！`);
        
    } catch (error) {
        console.error('\n❌ 学习过程出错:', error);
        process.exit(1);
    }
}

/**
 * 统计 OH 工程数量
 */
function countProjects(ohCodePath: string): number {
    let count = 0;
    
    try {
        const entries = fs.readdirSync(ohCodePath, { withFileTypes: true });
        
        for (const entry of entries) {
            if (entry.isDirectory()) {
                const bundleJsonPath = path.join(ohCodePath, entry.name, 'bundle.json');
                if (fs.existsSync(bundleJsonPath)) {
                    count++;
                    console.log(`  ✓ ${entry.name}`);
                }
            }
        }
    } catch (error) {
        console.error(`读取目录失败: ${error}`);
    }
    
    return count;
}

// 执行主函数
main().catch(error => {
    console.error('脚本执行失败:', error);
    process.exit(1);
});

